package main

import "fmt"

func main() {
	var s string
	var n int

	s = "PAYPALISHIRING"
	n = 3
	s = "01234"
	n = 2
	v := convert(s, n)
	fmt.Println(v)
}

// Z 字形变换
// 自己摸索的规律：
// 其他规律：实际就是给s的每一位标记就好了：假设numRows为4，那就是那s每一位的行数就是：1234321234321
func convert(s string, numRows int) string {
	if numRows == 1 {
		return s
	}
	sByte := []byte(s)

	subMod := numRows - 1 //num行 所以每个字符的行坐标 必须小于这个数
	mod := subMod * 2     //

	resMap := map[int][]byte{}
	for i := range sByte {
		// 判断在第几列
		pos := i % mod
		if pos > subMod {
			pos = mod - pos
		}
		resMap[pos] = append(resMap[pos], sByte[i])
	}
	resStr := ""
	for i := 0; i < numRows; i++ {
		resStr += string(resMap[i])
	}
	return resStr
}
